def tcpdump():
    import subprocess
    import fcntl
    import os
    # sudo tcpdump -i eth0 -n -s 0 -w - | grep -a -o -E "Host: .*|GET /.*"
    # cmd1 = ['tcpdump', '-i', 'eth0', '-n','-B', '4096','-s', '0', '-w', '-']
    cmd1 = ['tcpdump', 'src', '119.23.236.32', '-X', '-s', '0']
    cmd2 = ['grep', '--line-buffered', '-a', '-o', '-E', 'Host: .*|GET /.*']
    p1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE)
    p2 = subprocess.Popen(cmd2, stdout=subprocess.PIPE, stdin=p1.stdout)
    flags = fcntl.fcntl(p2.stdout.fileno(), fcntl.F_GETFL)
    fcntl.fcntl(p2.stdout.fileno(), fcntl.F_SETFL,
                (flags | os.O_NDELAY | os.O_NONBLOCK))
    return p2


def poll_tcpdump(proc):
    import select
    txt = None
    while True:
        # wait 1/10 second
        readReady, _, _ = select.select([proc.stdout.fileno()], [], [], 0.1)
        if not len(readReady):
            break
        try:
            for line in iter(proc.stdout.readline, ""):
                if txt is None:
                    txt = ''
                txt += line.decode('utf8')
        except IOError:
            print('data empty...')
        break
    return txt


proc = tcpdump()
while True:
    text = poll_tcpdump(proc)
    if text:
        print('>>>> ' + text)